package fulbitofacil.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import fulbitofacil.exception.DAOExcepcion;
import fulbitofacil.modelo.CanchaFul;
import fulbitofacil.modelo.Cliente;
import fulbitofacil.modelo.Comentario;
import fulbitofacil.util.ConexionBD;

public class ComentarioNegocioDAO extends BaseDAO{
	
	public void guardarComentarioDeUnaCancha(Comentario comentario)throws DAOExcepcion{
		String query = "INSERT INTO comentario (idComentario,descripcion,calificacion, Comentario_idComentario, CanchaFul_idCanchaFul,Persona_idPersona,fecha) VALUES (?,?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;

		try {
			con = ConexionBD.obtenerConexion();

			stmt = con.prepareStatement(query);
			
			stmt.setInt(1, comentario.getIdComentario());
			stmt.setString(2, comentario.getDescripcion());
			stmt.setInt(3, comentario.getCalificacion());
			stmt.setInt(4, comentario.getCalificacion());
			stmt.setInt(5, comentario.getMyCanchaFul().getIdCanchaFul());  
			stmt.setInt(6, comentario.getMyCliente().getId_persona());
			stmt.setString(7,comentario.getFecha());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	public void guardarComentarioDeUnComentario(Comentario comentario)throws DAOExcepcion{
		String query = "INSERT INTO comentario (idComentario,descripcion,calificacion, Comentario_idComentario, CanchaFul_idCanchaFul,Persona_idPersona,fecha) VALUES (?,?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;

		try {
			con = ConexionBD.obtenerConexion();

			stmt = con.prepareStatement(query);
			stmt.setInt(1,comentario.getIdComentario());
			stmt.setString(2, comentario.getDescripcion());
			stmt.setInt(3, comentario.getCalificacion()); 
			stmt.setInt(4, comentario.getMyComentario().getIdComentario());
			stmt.setInt(5, comentario.getMyCanchaFul().getIdCanchaFul()); 
			stmt.setInt(6, comentario.getMyCliente().getId_persona());
			stmt.setString(7,comentario.getFecha());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	
	public Comentario obtenerComentariosDeUnComentario(int idComentario) throws DAOExcepcion{	
		Comentario C=null;
		String query = "Select * from comentario where Comentario_idComentario="+idComentario;
		Connection con = null;
		PreparedStatement stmt = null;

		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			ResultSet rs = stmt.executeQuery();
			while (rs.next()) {			
				if(rs.first()){
					C = new Comentario();
					Cliente myCliente = new Cliente();
					CanchaFul myCanchaFul = new CanchaFul();
					Comentario myComentario = new Comentario();
					myCliente.setId_persona(rs.getInt("Persona_idPersona"));
					myCanchaFul.setIdCanchaFul(rs.getInt("CanchaFul_idCanchaFul"));

					C.setIdComentario(rs.getInt("idComentario"));
					C.setDescripcion(rs.getString("descripcion"));
					C.setCalificacion(rs.getInt("calificacion"));
					C.setFecha(rs.getString("fecha"));
					C.setMyComentario(myComentario);
					C.setMyCanchaFul(devolverCancha(rs.getInt("canchaFul_idCanchaFul")));
					C.setMyCliente(myCliente);
				}else{
					C = new Comentario();
					C.setIdComentario(0);
				}			
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());

		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}

		
		
		return C;
	}
	
	public Collection<Comentario> obtenerComentariosDeUnaCancha(int idCancha) throws DAOExcepcion{
		Collection<Comentario> lista = new ArrayList<Comentario>();
		
		String query = "Select * from comentario where CanchaFul_idCanchaFul="+idCancha;
		Connection con = null;
		PreparedStatement stmt = null;

		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			ResultSet rs = stmt.executeQuery();
			while (rs.next()) {
				Comentario C = new Comentario();
				Cliente myCliente = new Cliente();
				CanchaFul myCanchaFul = new CanchaFul();
				Comentario myComentario = new Comentario();
				myCliente.setId_persona(rs.getInt("Persona_idPersona"));
				myCanchaFul.setIdCanchaFul(rs.getInt("CanchaFul_idCanchaFul"));

				C.setIdComentario(rs.getInt("idComentario"));
				C.setDescripcion(rs.getString("descripcion"));
				C.setCalificacion(rs.getInt("calificacion"));
				C.setFecha(rs.getString("fecha"));
				C.setMyComentario(myComentario);
				C.setMyCanchaFul(devolverCancha(rs.getInt("canchaFul_idCanchaFul")));
				C.setMyCliente(myCliente);

				lista.add(C);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());

		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}

		
		
		return lista;
	}
	
	
	public void modificarComentario(int idComentario,Comentario com) throws DAOExcepcion{
		String query = "UPDATE COMENTARIO SET descripcion=?," +
											"calificacion=?," +
											"Comentario_idComentario=?," +
											"CanchaFul_idCanchaFul=?," +
											"Persona_idPersona=? " +
						"WHERE idComentario="+idComentario;
		
		Connection con = null;
		PreparedStatement stmt=null;
		try{
			con=ConexionBD.obtenerConexion();
			stmt=con.prepareStatement(query);
			stmt.setString(1,com.getDescripcion());
			stmt.setInt(2,com.getCalificacion());
			stmt.setInt(3,com.getMyComentario().getIdComentario());
			stmt.setInt(4,com.getMyCanchaFul().getIdCanchaFul());
			stmt.setInt(5,com.getMyCliente().getId_persona());
			int i = stmt.executeUpdate();
			if(i!=1){
				throw new SQLException("No se puede actualizar");
			}
		}catch(Exception e){
			System.err.println(e.getMessage());
		}finally{
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	
	
	public CanchaFul devolverCancha(int idCancha) throws DAOExcepcion{
		CanchaFul C=null;
		String query = "Select * from CanchaFul";
		Connection con = null;
		PreparedStatement stmt = null;

		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			ResultSet rs = stmt.executeQuery();
			while (rs.next()) {
				if(rs.getInt("idCanchaFul")==idCancha){
					C=new CanchaFul();
					C.setIdCanchaFul(idCancha);
					C.setNombre(rs.getString("nombre"));
					C.setCaractetisticas(rs.getString("caracteristicas"));
					C.setFoto(rs.getString("foto"));
				}							
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());

		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		
		return C;
	}
	
	
	
	
	
	
	
	
	
	
	
}
